import axios from 'axios'
import bus from './bus'


const formatRespones = function (res) {
    //console.log(res)
    if(res.data.code==300){
        bus.$emit('error-message', res.data.msg)
        bus.$emit('router-redirect', '/login')
        throw '登录超时';
    }else if(res.data.code==302){
        bus.$emit('error-message', res.data.msg)
        throw '没有权限';
    }else if(res.data.code==404){
        bus.$emit('error-message', res.data.msg)
        throw '路由不存在';
    }else if(res.data.code==500){
        bus.$emit('error-message', res.data.msg)
        throw '操作失败';
    }
    if (!res) {
        throw '接口返回错误';
    }
    if (res.status == 200) {
        return res.data;
    } else if (res.status == 300) {
        bus.$emit('router-redirect', '/omp/user/login')
        //  ??需要更改
        throw '需要登陆';
    }
    else if (res.status == 302) {
        bus.$emit('router-redirect', '/omp/user/login')
        //  ??需要更改
        throw '需要登陆';
    }
    else if (res.status == 404) {
        bus.$emit('router-redirect', '/omp/user/login')
        //  ??需要更改
        throw '需要登陆';
    }
    else if (res.status == 500) {
        bus.$emit('error-message', '服务器内部错误!')
        throw '服务器内部错误!';
    } 
     else if (res.status == 400) {
        bus.$emit('error-message', '请求的数据格式不符!')
        throw '请求的数据格式不符!';
    } else if (res.status == 401) {
        bus.$emit('error-message', '缺少请求的必要参数')
        throw '缺少请求的必要参数';
    } else if (res.status == 402) {
        bus.$emit('error-message', '请以合法途径访问服务!')
        throw '请以合法途径访问服务';
    } else if (res.status == 403) {
        bus.$emit('error-message', '请求参数有误!')
        throw '请求参数有误';
    } else if (res.status == 501) {
        bus.$emit('error-message', 'json格式有误!')
        throw 'json格式有误';
    }else if (res.status == 503) {
        bus.$emit('error-message', '服务器正忙，请稍后再试!')
        throw '服务器正忙，请稍后再试!';
    } else if (res.status == 504) {
        bus.$emit('error-message', '数据库繁忙，请稍后重试!')
        throw '数据库繁忙，请稍后重试!';
    } else if (res.status == 505) {
        // 重新获取token，后期实现
        // bus.$emit('error-message', 'accesstoken!')
    } else {
        bus.$emit('error-message', res.msg)
        throw res.msg;
    };
};

const Event = function (options) {
    var loading = options.loading;

    if(loading){
        bus.$emit('loading-show',{})       
    }
    var method = options.type || get;
    var baseUrlPath = ''
    if (process.env.NODE_ENV == 'development') {
        baseUrlPath =window.config.baseUrl.dev
    } else {
        baseUrlPath = window.config.baseUrl.pro
    };
    // debugger
    // axios.defaults.headers.common['Cookie'] = window.sessionStorage.getItem('token')||'';
    if (method == 'get') {
        return axios.get(baseUrlPath + options.url, {
            params: options.data
        }).then(function (res) {
            if (loading) {
                bus.$emit('loading-close', {})
            }
            return formatRespones(res)
        }).catch(function (err) {
            if (loading) {
                bus.$emit('loading-close', {})
            }
        })
    } else {
        return axios({
            method: method,
            url: baseUrlPath + options.url,
            data: options.data
        }).then(function (res) {
            if (loading) {
                bus.$emit('loading-close', {})
            }
            return formatRespones(res)
        }).catch(function (err) {
            if (loading) {
                bus.$emit('loading-close', {})
            }
            return err
        })
    }

}


export default {
    post(url, options,loading) {
        var _data = {};
        _data.type = 'post';
        _data.data = options;
        _data.url = url;
        _data.loading=loading
        return Event(_data)
    },
    get(url, options,loading) {
        var _data = {};
        _data.type = 'get';
        _data.data = options;
        _data.url = url;
        _data.loading=loading
        return Event(_data)
    },
    put(url, options,loading) {
        var _data = {};
        _data.type = 'put';
        _data.data = options;
        _data.url = url;
        _data.loading=loading
        return Event(_data)
    },
    delete(url, options,loading) {
        var _data = {};
        _data.type = 'delete';
        _data.data = options;
        _data.url = url;
        _data.loading=loading
        return Event(_data)
    }
}


